web安全
原理
Nginx Lua Redis防止CC攻击实现原理:
同一个外网IP、同一个网址(ngx.var.request_uri)、同一个客户端(http_user_agent)在某一段时间(CCseconds)内访问某个网址(ngx.var.request_uri)超过指定次数(CCcount),则禁止这个外网IP+同一个客户端(md5(IP+ngx.var.http_user_agent)访问这个网址(ngx.var.request_uri)一段时间(blackseconds)。
该脚本使用lua编写(依赖nginx+lua),将信息写到redis(依赖redis.lua)。
Nginx lua模块安装
重新编译nginx,安装lua模块,或者直接使用《OneinStack》安装OpenResty自带改模块
1 | pushd /root/oneinstack/src |
加载redis.lua
1 | mkdir /usr/local/nginx/conf/lua |
在/usr/local/nginx/conf/nginx.conf http { }中添加:
1 | #the Nginx bundle: |
防止CC规则waf.lua
将下面内容保存在/usr/local/nginx/conf/lua/waf.lua
1 | local get_headers = ngx.req.get_headers |
Nginx虚拟主机加载waf.lua
在虚拟主机配置文件/usr/local/nginx/conf/vhost/oneinstack.com.conf
1 | access_by_lua_file "/usr/local/nginx/conf/lua/waf.lua"; |
测试
一分钟之内,一个页面快速点击20次以上,登录redis,看到black开通的key即被禁止访问(nginx 503)